from django.contrib.auth.models import User
from django.shortcuts import render, HttpResponse
import random
from utils.aliyun.sms import send_sms_single
from django.conf import settings
from django.shortcuts import render, HttpResponse
import random
import logging

# 配置日志
logger = logging.getLogger(__name__)

""" 发送注册短信 """
def send_sms(request):
    phone = '17353'  # 指定手机号码
    tpl = 'register'  # 指定模板标识为注册
    logger.debug(f"Sending SMS to phone: {phone}, tpl: {tpl}")  # 调试信息

    # 获取注册模板ID
    template_code = settings.ALIYUN_SMS_TEMPLE.get(tpl)
    if not template_code:
        logger.error(f"Template not found for tpl: {tpl}")
        return HttpResponse('模板不存在')

    # 生成随机验证码
    code = random.randrange(1000, 9999)
    logger.debug(f"Generated code: {code}")

    # 调用短信发送函数
    res = send_sms_single(phone, template_code, {"code": str(code)})
    logger.debug(f"SMS response: {res}")

    # 检查发送结果
    if res['result'] == 0:
        # 保存验证码到数据库或缓存中，用于后续验证
        save_verification_code(phone, code)
        return HttpResponse('成功')
    else:
        logger.error(f"Failed to send SMS: {res['errmsg']}")
        return HttpResponse(f"发送失败: {res['errmsg']}")

def save_verification_code(phone, code):
    """ 保存验证码到数据库或缓存中 """
    # 示例：使用Django缓存保存验证码，有效期5分钟
    from django.core.cache import cache
    cache.set(f"verification_code_{phone}", code, timeout=60)



#创建用户注册的modelform
from django import forms
from app01 import models
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError
class RegisterModelForm(forms.ModelForm):
    mobile_phone = forms.EmailField(
        label='手机号',
        validators=[RegexValidator(r'^(1[3|4|5|6|7|8|9])\d{9}$', '手机号格式错误'),]
    )
    password = forms.CharField(
        label='密码',
        widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'请输入密码'})
    )
    confirm_password = forms.CharField(
        label='重复密码',
        widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'请再次输入密码'})
    )
    code = forms.CharField(
        label='验证码',
        widget=forms.TextInput(attrs={'class':'form-control','placeholder':'请输入验证码'})
    )

    class Meta:
        model = models.UserInfo
        fields = ['username', 'email', 'password', 'confirm_password', 'mobile_phone', 'code']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for name, field in self.fields.items():
            field.widget.attrs['class'] = 'form-control'
            '''field：表示表单中的一个字段，例如 username、password 等。
                widget：是字段的控件对象，用于渲染 HTML 输入框（如 <input>、<textarea> 等）。
                attrs：是一个字典，用于设置控件的 HTML 属性。
                class：是 HTML 中的 class 属性，用于添加 CSS 类。
                    .form-control {
                    width: 100%;
                    padding: 8px;
                    border: 1px solid #ccc;
                    border-radius: 4px;
                }
                当你将 class="form-control" 添加到输入框时，这个输入框就会应用上述 CSS 样式。'''
            if name == 'confirm_password':
                field.widget.attrs['placeholder'] = '请再次输入密码'
            else:
                field.widget.attrs['placeholder'] = '请输入%s' % (field.label,)
            '''self.fields.items()：
            self.fields 是一个字典，包含表单的所有字段。
            self.fields.items() 返回一个键值对的迭代器，其中键是字段名称（字符串），值是字段对象（BoundField）。
            field.widget.attrs：
            field.widget 是字段的控件对象，attrs 是一个字典，用于设置控件的 HTML 属性。
            name 和 field：
            name 是字段的名称（字符串），例如 'confirm_password'。
            field 是字段对象，包含字段的详细信息。'''
def register(request):
    form = RegisterModelForm()
    return render(request,'app01/register.html',{'form':form})#渲染并传递表单


#django-redis
from django_redis import get_redis_connection
from django.shortcuts import HttpResponse
def index(request):
    conn = get_redis_connection('default')#用的时候去写这行代码，连接池在每次django启动的时候redis启动，每次写就获得一个连接
    conn.set("name","李海霞",ex=10)
    value = conn.get("name")
    print(value)
    return HttpResponse('ok')